import requests
from typing import List, Dict
from dataclasses import dataclass
from app.db.database import SessionLocal
from app.db.crud import create_tpost
from app.pacong.content_fetcher import ContentFetcher

@dataclass
class TiebaTopicItem:
    """贴吧热门话题条目的数据类"""
    topic_id: str
    topic_name: str
    create_time: int
    topic_url: str

class TiebaHotTopicCrawler(ContentFetcher):
    """
    用于从百度贴吧获取热门话题数据并处理的类。
    """

    def __init__(self):
        """
        初始化类实例。
        """
        self.url = "https://tieba.baidu.com/hottopic/browse/topicList"
        self.content_type = 5  # 贴吧的source_id设为5

    def my_fetch(self) -> Dict:
        """
        发送HTTP GET请求，获取API响应。

        :return: 返回JSON响应。
        :raises: 如果请求失败，抛出HTTPError。
        """
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
        response = requests.get(self.url, headers=headers)
        response.raise_for_status()
        return response.json()

    def fetch_content(self) -> List[Dict]:
        """
        从API获取数据并处理。

        :return: 返回处理后的数据列表。
        """
        # 获取API响应
        response_data = self.my_fetch()
        
        # 验证响应数据结构
        if 'data' not in response_data or 'bang_topic' not in response_data['data']:
            raise ValueError("API返回数据结构异常")
            
        topic_list = response_data['data']['bang_topic'].get('topic_list', [])
        
        result = []
        for topic in topic_list:
            # 添加到结果列表
            result.append({
                "id": topic['topic_id'],
                "title": topic['topic_name'],
                "url": topic['topic_url'],
                "extra": {
                    "create_time": topic.get('create_time')
                }
            })
        
        return result


# 示例调用
if __name__ == "__main__":
    # 创建类实例
    crawler = TiebaHotTopicCrawler()
    
    # 获取并保存数据
    crawler.fetch_and_save() 